<?php

class facturasxtiposvalores extends Basefacturasxtiposvalores
{
     private function SumMovimientos(){
        $criteria = new Criteria();
        $criteria->add(movimientosPeer::FACTURASXTIPOSVALORES_ID,$this->getid());
        $movimientos = movimientosPeer::doSelectOne($criteria);
        if(!$movimientos){
           $movimientos = new movimientos();
           $movimientos->setCierreCajaId($movimientos->BuscarCajaAbierta());
        }
        $movimientos->setMontoingreso($this->getImporte());
        $movimientos->setFacturasxtiposvaloresId($this->getId());
        $movimientos->setCategorias($this->getvalorestipo() );
        $movimientos->setDescripcion('Cobro de la Factura '.$this->getfacturas() );
        //$movimientos->setCreatedat($this->getCreatedAt());
        $movimientos->save();
    }
    private function SumaFactura(){
        $factura = $this->getfacturas();
        $factura->setTotalPagado($factura->getTotalPagado() + $this->getImporte());
        $factura->save();
    }
    private function RestaFactura(){
        $factura = $this->getfacturas();
        $factura->setTotalPagado($factura->getTotalPagado() - $this->getImporte());
        $factura->save();
    }
    public function save(PropelPDO $con = null){
        $affectedRows =  parent::save($con);
        $this->SumMovimientos();
        //$this->SumaFactura();
        return $affectedRows;
    }

    private function BorrarMovimientos(){
         $criteria = new Criteria();
         $criteria->add(movimientosPeer::FACTURASXTIPOSVALORES_ID,$this->getid());
         $movimientos = movimientosPeer::doSelectOne($criteria);
         $movimientos->delete();
    }
    public function delete(PropelPDO $con = null){
        auditoria::AuditoriaFull($this,true);
        $this->BorrarMovimientos();
        //$this->RestaFactura();
        return parent::delete($con);
    }
    private function AuditarBorrado(){
        $auditoria = new auditoria();
        $auditoria->setEvento('BORRADO');
        $auditoria->setTabla('PAGOS CONTADO');
        $usuario = sfContext::getInstance()->getUser();
        $auditoria->setUsuario($usuario);
        $auditoria->save();
        $au_det = new auditoria_detalle;
        $au_det->setAuditoriaId($auditoria->getId());
        $au_det->setCampo('NUMERO FACTURA');
        $au_det->setValoranterior($this->getfacturas());
        $au_det->setNuevovalor('');
        $au_det->save();
        $au_det = new auditoria_detalle;
        $au_det->setAuditoriaId($auditoria->getId());
        $au_det->setCampo('TIPO DE PAGO');
        $au_det->setValoranterior($this->getvalorestipo());
        $au_det->setNuevovalor('');
        $au_det->save();
        $au_det = new auditoria_detalle;
        $au_det->setAuditoriaId($auditoria->getId());
        $au_det->setCampo('FECHA DEL PAGO');
        $au_det->setValoranterior($this->getFecha('d-m-Y'));
        $au_det->setNuevovalor('');
        $au_det->save();
        $au_det = new auditoria_detalle;
        $au_det->setAuditoriaId($auditoria->getId());
        $au_det->setCampo('MONTO');
        $au_det->setValoranterior($this->getImporte());
        $au_det->setNuevovalor('');
        $au_det->save();
        $au_det = new auditoria_detalle;
        $au_det->setAuditoriaId($auditoria->getId());
        $au_det->setCampo('ENTIDAD EMISORA');
        $au_det->setValoranterior($this->getEntidademisora());
        $au_det->setNuevovalor('');
        $au_det->save();
        $au_det = new auditoria_detalle;
        $au_det->setAuditoriaId($auditoria->getId());
        $au_det->setCampo('NUMERO DE DOCUMENTO');
        $au_det->setValoranterior($this->getNumerodocumento());
        $au_det->setNuevovalor('');
        $au_det->save();
    }

    public function __toString() {
        return $this->getId();
    }
    public function EsBorrable(){
        $criteria = new criteria; $criteria->add(movimientosPeer::FACTURASXTIPOSVALORES_ID,$this->getId());
        $movimientos = movimientosPeer::doSelectOne($criteria);
        $cierre = $movimientos->getcierre_de_caja();
        return $cierre->getAbierto();
    }
}
